Multiple DataSource কি?
Multiple DataSource (বহু ডেটা সোর্স) হল একটি কনফিগারেশন যেখানে একটি অ্যাপ্লিকেশন একাধিক ডেটাবেস বা ডেটা সোর্স ব্যবহার করতে পারে। স্প্রিং বুট ORM (Spring Boot ORM) ব্যবহার করার সময় বিভিন্ন ধরনের ডেটাবেস সংযোগের প্রয়োজন হতে পারে, যেমন একাধিক রিলেশনাল ডেটাবেস, অথবা একাধিক ডেটাবেসের জন্য বিভিন্ন কনফিগারেশন তৈরি করতে হয়।
এটি সাধারণত তখন ব্যবহৃত হয় যখন একটি অ্যাপ্লিকেশনে একাধিক ডেটাবেস সিস্টেম বা বিভিন্ন ডেটাবেস টেবিল ব্যবহারের প্রয়োজন হয়, যেমন - একটি ডেটাবেস ব্যবহৃত হতে পারে রিড অপারেশনের জন্য এবং অন্যটি রাইট অপারেশনের জন্য।
Multiple DataSource এর প্রয়োজনীয়তা
একটি অ্যাপ্লিকেশনে একাধিক ডেটাবেস বা DataSource ব্যবহার করার প্রয়োজনীয়তা বিভিন্ন কারণে হতে পারে। নিচে কিছু মূল কারণ উল্লেখ করা হলো:
১. উচ্চ পারফরম্যান্সের জন্য
কখনো কখনো বিভিন্ন ডেটাবেস আলাদা আলাদা উদ্দেশ্যে ব্যবহৃত হয়, যেমন একটি ডেটাবেস শুধুমাত্র রিড অপারেশনের জন্য এবং অন্যটি রাইট অপারেশনের জন্য। এতে পারফরম্যান্স বৃদ্ধি পায়, কারণ ডেটাবেসগুলো নির্দিষ্ট কাজের জন্য অপ্টিমাইজ করা থাকে।
২. বিভিন্ন ধরনের ডেটাবেস ব্যবহারের ক্ষেত্রে
একটি অ্যাপ্লিকেশন একাধিক ডেটাবেস সিস্টেম যেমন MySQL, PostgreSQL, MongoDB, ইত্যাদি ব্যবহার করতে পারে। স্প্রিং বুট ORM-এর মাধ্যমে এইসব ডেটাবেসগুলোকে আলাদা আলাদা কনফিগারেশন করে একসাথে পরিচালনা করা যায়।
৩. ডেটাবেস মাইগ্রেশন এবং পৃথক ডেটাবেস সিস্টেম
একটি অ্যাপ্লিকেশন কখনো কখনো এক ডেটাবেস সিস্টেম থেকে অন্য সিস্টেমে স্থানান্তরিত হয় বা মাইগ্রেট করা হয়। এমন পরিস্থিতিতে Multiple DataSource কনফিগারেশন ব্যবহার করে নতুন ডেটাবেস সিস্টেমের সাথে পুরনো সিস্টেমের ডেটা ম্যানেজ করা যায়।
৪. টেবিল এবং ডেটাবেস লজিকের আলাদা ব্যবহার
কখনো কখনো অ্যাপ্লিকেশনের কিছু টেবিল বা ডেটাবেস লজিক আলাদা থাকতে পারে, যা একাধিক ডেটাবেসে পরিচালিত হয়। যেমন, এক ডেটাবেসে সংবেদনশীল তথ্য রাখা এবং অন্য ডেটাবেসে সাধারণ তথ্য রাখা।
স্প্রিং বুটে Multiple DataSource কনফিগারেশন
স্প্রিং বুটে Multiple DataSource কনফিগারেশন করার জন্য কিছু স্টেপ অনুসরণ করতে হয়।
১. ডেটাবেস কনফিগারেশন তৈরি করা
প্রথমে আপনাকে প্রতিটি ডেটাবেসের জন্য কনফিগারেশন ক্লাস তৈরি করতে হবে। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশনে দুটি ডেটাবেস থাকে, একটি রিড অপারেশন এবং অন্যটি রাইট অপারেশনের জন্য, তাহলে তাদের জন্য আলাদা আলাদা কনফিগারেশন ক্লাস তৈরি করতে হবে।
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "com.example.readrepository",
entityManagerFactoryRef = "readEntityManagerFactory",
transactionManagerRef = "readTransactionManager"
)
public class ReadDataSourceConfig {
@Bean
@Primary
public DataSource readDataSource() {
return DataSourceBuilder.create().url("jdbc:mysql://localhost:3306/readDB").username("root").password("password").build();
}
@Bean
public LocalContainerEntityManagerFactoryBean readEntityManagerFactory(@Qualifier("readDataSource") DataSource dataSource, EntityManagerFactoryBuilder builder) {
return builder.dataSource(dataSource).packages("com.example.model").persistenceUnit("read").build();
}
@Bean
public PlatformTransactionManager readTransactionManager(@Qualifier("readEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
২. ডেটাবেস রেপোজিটরি কনফিগারেশন
প্রতিটি ডেটাবেসের জন্য আলাদা রেপোজিটরি তৈরি করতে হয় এবং সেগুলোকে সঠিক ডেটাবেসের সাথে যুক্ত করতে হয়।
@Repository
public interface ReadRepository extends JpaRepository<ReadEntity, Long> {
List<ReadEntity> findByField(String field);
}
৩. ডেটাবেস ট্রানজেকশন পরিচালনা করা
যখন একাধিক ডেটাবেস ব্যবহৃত হয়, তখন ট্রানজেকশন ম্যানেজমেন্ট খুবই গুরুত্বপূর্ণ। প্রতিটি DataSource এর জন্য ট্রানজেকশন ম্যানেজার কনফিগারেশনও করতে হয়।
Multiple DataSource ব্যবহারের ফলে আপনার অ্যাপ্লিকেশনের কার্যকারিতা এবং পরিচালন ক্ষমতা অনেক বৃদ্ধি পেতে পারে, বিশেষ করে যখন বড় ডেটাবেস এবং ভিন্ন ধরনের ডেটাবেস সিস্টেম ব্যবহৃত হয়।